#include <ruby.h>
#include "m3g/m3g.hpp"
#include "ruby-m3g.hpp"
using namespace m3g;
using namespace std;

/**
 * このobjとここからたどれる全てのリファレンスをobjsに足して返す。
 * 重複あり。
 */
void extract_all_references (Object3D* obj, vector<Object3D*>& objs)
{
    objs.push_back (obj);

    int        num  = obj->getReferences (0);
    Object3D** refs = (Object3D**)ruby_xmalloc(sizeof(Object3D*)*num);
    __TRY__;
    obj->getReferences (refs);
    __CATCH__;
    for (int i = 0; i < num; i++) {
        extract_all_references (refs[i], objs);
    }
    ruby_xfree (refs);
}
